﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace DAL
{
    public partial class Proforma
    {

        public int getidAnterior(dbGestionDataContext _db, int idinternal, int idProyecto)
        {
            int intAnterior = 0;


            var id = from i in _db.Proformas
                     where i.idInternal < idinternal && i.idProyecto == idProyecto 
                     group i by i.idProyecto into g
                     select new
                     {
                         idAnterior = g.Max(p => p.idInternal)
                     };

            if (id.Count() > 0)
            {
                intAnterior = id.First().idAnterior;

            }
            else
            {
                throw new Exception("No existe Registros");
            }


            return intAnterior;

        }

        public int getidSiguiente(dbGestionDataContext _db, int idinternal, int idProyecto)
        {
            int intSiguiente = 0;

            //revisar la sentencia generada
            var id = from i in _db.Proformas
                     where i.idInternal > idinternal & i.idProyecto == idProyecto
                     group i by i.idProyecto into g
                     select new
                     {
                         idSiguiente = g.Min(p => p.idInternal)
                     };


            if (id.Count() > 0)
            {
                intSiguiente = id.First().idSiguiente;

            }
            else
            {
                throw new Exception("No existe Registros");
            }

            return intSiguiente;
        }

        public string getCorrelativo(dbGestionDataContext _db, int idProyecto)
        {
            // fecha: 04/10/2011
            //  Correlativo por Etapa:
            //int idEmpresa = _db.Obras.Single(p => p.idInternal == idObra).Proyecto.idEmpresa.Value;

            string numDocumento = "00000001";


            var q = from a in _db.Proformas
                    where a.idProyecto == idProyecto
                    group a by a.idProyecto into g
                    select new
                    {
                        idEtapa = g.Key,
                        numDocumento = g.Max(p => p.numDocumento)
                    };

            if (q.Count() > 0)
            {
                int numActual = int.Parse(q.First().numDocumento);
            
                numActual++;
                if (numActual < 10)
                    numDocumento = "0000000" + numActual.ToString();
                else if (numActual < 100)
                    numDocumento = "000000" + numActual.ToString();
                else if (numActual < 1000)
                    numDocumento = "00000" + numActual.ToString();
                else if (numActual < 10000)
                    numDocumento = "0000" + numActual.ToString();
                else if (numActual < 100000)
                    numDocumento = "000" + numActual.ToString();
                else if (numActual < 1000000)
                    numDocumento = "00" + numActual.ToString();
                else if (numActual < 1000000)
                    numDocumento = "0" + numActual.ToString();
                else if (numActual < 10000000)
                    numDocumento = numActual.ToString();
                else if (numActual > 9999999)
                {
                    throw new Exception("Limite  de Correlativo Comparativo");
                }


            }
            return numDocumento;

        }


       

        public void SetAdd(dbGestionDataContext _db,
                         
                            string	numDocumento,
                            int	idProyecto,
                            string	nombre,
                            string docCliente ,
                            string	apellido,
                            string	direccion  ,
                            string	telefono ,
                            string celular,
                            string	email ,
                            int	idMoneda  ,
                             DateTime	fecha ,
                            int	idPregusnta1,
                            int	idUsuarioCre ,
                            int	idFormatoVenta ,
                            int?	idBanco,
                            decimal tipoCambio,                 
                            decimal  bono,
                            decimal financiado,
                            decimal contado,
                            string observacionInter,
                            string observacionFinan,
                            string tipoIngreso
                            )
            
        {

                    this.docCliente = docCliente;
                    this.numDocumento=numDocumento;
                    this.idProyecto = idProyecto;
                    this.nombre=nombre;
                    this.apellido=apellido;
                    this.direccion=direccion;
                    this.telefono=telefono;
                    this.email=email;
                    this.idMoneda=idMoneda;
                    this.celular = celular;
                    this.tipoCambio = tipoCambio;
                    this.fecha=fecha;
                    this.idPregusnta1=idPregusnta1;
                    this.idUsuarioCre=idUsuarioCre;
                    this.idUsuairoMod=idUsuarioCre;
                    this.fechaCre=DateTime.Now;
                    this.fechaMod=DateTime.Now;
                    this.idFormatoVenta=idFormatoVenta;
                    this.idBanco = idBanco;
                    this.bono = bono;
                    this.financiado = financiado;
                    this.contado = contado;
                    this.observacionInter=observacionInter;
                    this.observacionFinan=observacionFinan;
                    this.tipoIngreso=tipoIngreso;
           
                
                _db.Proformas.InsertOnSubmit(this);

        }

        public void SetUpdatetotal(decimal total)
        {
            this.total = total;
        }

        public void SetUpdate(
                            string nombre,
                            string docCliente,
                            string apellido,
                            string direccion,
                            string telefono,
                            string celular,
                            string email,
                            int idMoneda,
                          
                            int idPregusnta1,
                          
                            int idUsuairoMod,
                            int idFormatoVenta,
                            int? idBanco,
                            decimal bono,
                            decimal financiado,
                            decimal contado,
                            string observacionInter,
                            string observacionFinan,
                            string tipoIngreso)
        {


            this.docCliente = docCliente;
            this.nombre = nombre;
            this.apellido = apellido;
            this.direccion = direccion;
            this.telefono = telefono;
            this.email = email;
            this.idMoneda = idMoneda;
            this.celular = celular;
           
            this.fecha = fecha;
            this.idPregusnta1 = idPregusnta1;

            this.idUsuairoMod = idUsuairoMod;
           
            this.fechaMod = DateTime.Now;
            this.idFormatoVenta = idFormatoVenta;
            this.idBanco = idBanco;
            this.bono = bono;
                    this.financiado = financiado;
                    this.contado = contado;

        }
    }
}
